Docker 设置容器权限白名单
0.1 背景知识
--privileged=true
的权限非常大,接近于宿主机的root 用户权限,为了防止用户的滥用,需要增加限制,只提供给容器必须的权限。所以 Docker 提供了权限白名单的机制,使用 --cap-add
来添加必要的权限。
为了能够修改 MAC 地址,我们给予新的容器 kcm_centos03 一个 NET_ADMIN
的权限。
1 创建容器
添加 --cap-add=NET_ADMIN
。
docker run -ti -h node113 --cap-add=NET_ADMIN --name kcm_centos03 --network host centos:7.2.1511 /bin/bash
2 修改 MAC 地址
1、安装 iproute 软件包。
yum install iproute -y
2、查看容器的 IP 地址和 MAC 地址信息。
ip a
3、修改 mac 地址。
ip link set eno16777736 address 00:01:02:03:04:05
4、查看修改后的结果。
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:01:02:03:04:05 brd ff:ff:ff:ff:ff:ff
inet 192.168.40.111/24 brd 192.168.40.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe73:e151/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 500
link/ether 52:54:00:62:ff:61 brd ff:ff:ff:ff:ff:ff
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:96:f5:99:ff brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:96ff:fef5:99ff/64 scope link
valid_lft forever preferred_lft forever
3 查看容器权限的白名单
退出容器后,可以在docker container inspect
命令中查看容器的必要配置:
docker container inspect -f {{.HostConfig.Privileged}} kcm_centos03
false
docker container inspect -f {{.HostConfig.CapAdd}} kcm_centos03
{[NET_ADMIN]}